{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f04dd603-a2d1-48ce-8c17-9f1dba8de1ee",
   "metadata": {},
   "source": [
    "Chapter 01\n",
    "\n",
    "# 平行四边形法则\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccafb456-2453-4c82-8a65-b1963a370cb2",
   "metadata": {},
   "source": [
    "这段代码的数学背景基于**向量加法**的概念，并通过图形方式展示两个向量的相加过程。我们详细分析其中的数学原理，并配以公式说明。\n",
    "\n",
    "---\n",
    "\n",
    "### **1. 向量的定义**\n",
    "首先，定义两个二维向量：\n",
    "$$\n",
    "\\mathbf{a} = \\begin{bmatrix} 4 \\\\ 1 \\end{bmatrix}, \\quad \\mathbf{b} = \\begin{bmatrix} 1 \\\\ 2 \\end{bmatrix}\n",
    "$$\n",
    "这些向量在二维坐标系中分别表示从原点 $(0,0)$ 指向点 $(4,1)$ 和 $(1,2)$ 的方向。\n",
    "\n",
    "---\n",
    "\n",
    "### **2. 向量加法**\n",
    "向量加法的计算遵循**分量相加**的原则：\n",
    "$$\n",
    "\\mathbf{a} + \\mathbf{b} =\n",
    "\\begin{bmatrix} 4 \\\\ 1 \\end{bmatrix} +\n",
    "\\begin{bmatrix} 1 \\\\ 2 \\end{bmatrix} =\n",
    "\\begin{bmatrix} 4+1 \\\\ 1+2 \\end{bmatrix} =\n",
    "\\begin{bmatrix} 5 \\\\ 3 \\end{bmatrix}\n",
    "$$\n",
    "在几何意义上，向量 $\\mathbf{a} + \\mathbf{b}$ 表示从原点 $(0,0)$ 指向点 $(5,3)$ 的新向量。\n",
    "\n",
    "---\n",
    "\n",
    "### **3. 向量的可视化**\n",
    "代码使用 `matplotlib` 绘制以下内容：\n",
    "- 以**红色**绘制向量 $\\mathbf{a}$\n",
    "- 以**蓝色**绘制向量 $\\mathbf{b}$\n",
    "- 以**粉色**绘制向量 $\\mathbf{a} + \\mathbf{b}$\n",
    "\n",
    "此外，为了清晰展示**向量加法的平行四边形法则**，代码绘制了两条虚线：\n",
    "- 一条从 $\\mathbf{b}$ 的终点 $(1,2)$ 到 $\\mathbf{a}+\\mathbf{b}$ 的终点 $(5,3)$\n",
    "- 另一条从 $\\mathbf{a}$ 的终点 $(4,1)$ 到 $\\mathbf{a}+\\mathbf{b}$ 的终点 $(5,3)$\n",
    "\n",
    "这形成了一个平行四边形，表明：\n",
    "$$\n",
    "\\mathbf{a} + \\mathbf{b} = \\mathbf{b} + \\mathbf{a}\n",
    "$$\n",
    "即向量加法满足**交换律**。\n",
    "\n",
    "---\n",
    "\n",
    "### **4. 坐标轴与网格**\n",
    "- 代码设置了 $x$ 轴范围为 $[0,5]$，$y$ 轴范围为 $[0,5]$，确保所有向量清晰可见。\n",
    "- 通过 `axhline` 和 `axvline` 添加黑色基准线以标明坐标轴。\n",
    "- 通过 `grid` 添加灰色网格线以增强可读性。\n",
    "\n",
    "---\n",
    "\n",
    "### **5. 结论**\n",
    "本代码使用**向量可视化**展示了向量加法的几何意义。具体来说：\n",
    "- **向量相加遵循分量相加法则**。\n",
    "- **结果向量可以通过平行四边形法则构造**。\n",
    "- **向量加法满足交换律**，即 $\\mathbf{a} + \\mathbf{b} = \\mathbf{b} + \\mathbf{a}$。\n",
    "\n",
    "最终的图形展示了三个向量，并通过平行四边形展示向量加法的几何特性。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ad0b66c-609f-443f-9671-e91d35958948",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "13f24a5f-0c2c-4c26-8ca5-5d02f8e0789c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cfba2da9-2eaf-4918-bfcf-a377bd40a14b",
   "metadata": {},
   "source": [
    "## 定义向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "de6e27fe-ecc8-4a8f-9759-5582621c59de",
   "metadata": {},
   "outputs": [],
   "source": [
    "a_vec = np.array([4, 1])\n",
    "b_vec = np.array([1, 2])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6995e14b-57a2-4d6a-9eb7-b30b78337cf2",
   "metadata": {},
   "source": [
    "## 计算向量和"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "45e229b8-0d2f-471d-b3b3-a7318aaf56dd",
   "metadata": {},
   "outputs": [],
   "source": [
    "a_plus_b = a_vec + b_vec"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2847be99-994b-4013-ab7b-f09d4e9b5b0b",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "439bd53d-4ad2-4219-9e2e-8196eb9e5857",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2023cc0f7d0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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q1cvvf/++8Hz1FkoB99hNO86funiJUIeEerofup9+/bV3XffHTxuvmjRImVkZBDq8B9G8670zjvv6I033jC+i5cIeXRRfX19i8Vus2bN0ooVK1psE9qp19XVBbc/66yzbK0VcByjeVcbM2aM9uzZo9LSUqO7eImQRztad+qvvvqq3n//fWVkZEiSzjjjDL3++uuM34FQjOY9IzMzU5mZmU6XEXNhhXxxcbH+8pe/6J133lFSUpLOOOMM3X///Ro1alSs6oON/v3vf+v5559v9zz19evXq7CwUJL005/+VHfeeSehDjRjNO96lmVp586dwdN2/SCsv6HXrl2rOXPmqKSkRKtXr1Z9fb2mT5+u6urqWNWHGKmrq9Nrr72mjz76KPhcSUmJ7rzzTr3wwgvBhXKFhYV65JFHtH37dl144YXBbZOSkgh4QGoK9bd3N/20DviUvtLEHGlEFgHvAqtWrVJubq4uu+wy2XzbFseE1cmvXLmyxeMnnnhCGRkZ2rJli84888yoFoboau889d/+9rcqKiqSJOXn56uwsJDxO9AVjOY9JXRF/dChQxXwyf8v3TomX1VVJanjuxHV1NSopubrf90ePnxYUtOdjOrr67vz9eiCd955R/PmzdPWrVuPmbikpaWpsrIyeFepvn37avHixcHXKysr7SzVCM3/TcA+juzzysPSB+VSTe2xrw0cIGVmSPEB6bPP7K8txrz6Z/yll14Knhf/wx/+MPj3nhc052YkIg55y7JUVFSkyZMnKzc3t93tiouLtWDBgki/Bt3U2JimTZs2qba2VmlpaZo0aZImTZqkyZMna9SoUXTqQDhqapvCvbKNv3T79Wk67p7U69jX4CjLsnT//fdLkq699lrjV9SHivh+8nPmzNE///lPbdiwocMVim118llZWdxP3gYffSQVFVVoxoy/a+LEiYzfbcC9tu1nyz5nNB/kxT/jK1eu1IwZM5SUlKT3339fgwYNcrqksNh+P/m5c+fq73//u9atW9fpKQiJiYlKTEyM5GvQDQcPSuecI33rW9L555/vqf8gAVdh1bynhR6Lv+GGGzwX8N0VVshblqW5c+dq+fLlWrNmjbKzs2NVF7qhqkr67nelXbukq65yuhrAo7igjRE++ugj7d+/3xdXt2tLWCE/Z84c/elPf9Lf/vY39evXT5988okkKSUlRUlJ/GF3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dBlG+/zzz60TTzzRWr16tTV16lTrxz/+sdMlGevuu++2xo8f3+3PsaWTb75F7fTp01s839EtagEva76lciQ3lEB4GhoatGzZMlVXVysvL8/pcow2Z84cnXfeeZo2bZrTpfjCe++9pyFDhig7O1uXXXaZ3n///bA/I6K70IUrklvUAl5lWZaKioo0efJk5ebmOl2OsbZv3668vDwdPXpUffv21fLly3XSSSc5XZaxli1bpq1bt6q0tNTpUnzhtNNO09NPP62RI0fq008/1X333aczzjhDO3bsUHp6epc/x5aQbxbOLWoBr7rpppv01ltvacOGDU6XYrRRo0Zp27Ztqqys1PPPP6+rr75aa9euJehjYP/+/frxj3+sF154Qb169XK6HF+YMWNG8Ndjx45VXl6ehg8frqeeeqrF7ds7Y0vIR3KLWsCL5s6dq7///e9at26dMjMznS7HaD179tSIESMkSRMnTlRpaakeeughLVq0yOHKzLNlyxYdOHBAEyZMCD7X0NCgdevW6Q9/+INqamoUHx/vYIXm69Onj8aOHav33nsvrPfZckyeW9TCdJZl6aabbtJf/vIXvfzyy8rOzna6JN+xLEs1NTVOl2Gks88+W9u3b9e2bduCPxMnTtSVV16pbdu2EfA2qKmp0a5duzR48OCw3mfbuJ5b1Nrriy++0O7du4OP9+7dq23btiktLU3Dhg1zsDIzzZkzR3/605/0t7/9Tf369QtOrVJSUpSUlORwdea58847NWPGDGVlZenzzz/XsmXLtGbNGq1cudLp0ozUr1+/Y9aX9OnTR+np6aw7iZFbb71VBQUFGjZsmA4cOKD77rtPhw8f1tVXXx3W59gW8t29RS3Cs3nzZn37298OPm4+hnP11VfrySefdKgqcy1cuFCSlJ+f3+L5J554Qtdcc439BRnu008/1VVXXaXy8nKlpKRo3LhxWrlypc455xynSwOi4sMPP9Tll1+ugwcP6rjjjtPpp5+ukpKSsDOTW80CAGAorl0PAIChCHkAAAxFyAMAYChCHgAAQxHyAAAYipAHAMBQhDwAAIYi5AEAMBQhDwCAoQh5AAAMRcgDAGAoQh4AAEP9f4/JrBRdB6jEAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(6,6))\n",
    "\n",
    "# 绘制向量 a\n",
    "plt.quiver(0, 0, \n",
    "           a_vec[0], a_vec[1], \n",
    "           angles='xy', scale_units='xy', scale=1, \n",
    "           color='r', label=\"a\")\n",
    "\n",
    "# 绘制向量 b\n",
    "plt.quiver(0, 0, \n",
    "           b_vec[0], b_vec[1], \n",
    "           angles='xy', scale_units='xy', scale=1, \n",
    "           color='b', label=\"a\")\n",
    "\n",
    "# 绘制向量 a + b\n",
    "plt.quiver(0, 0, \n",
    "           a_plus_b[0], a_plus_b[1], \n",
    "           angles='xy', scale_units='xy', scale=1, \n",
    "           color='pink', label=\"a + b\")\n",
    "\n",
    "# 画出平行四边形的另外两条边\n",
    "plt.plot([b_vec[0], a_plus_b[0]], \n",
    "         [b_vec[1], a_plus_b[1]], 'k--')\n",
    "\n",
    "plt.plot([a_vec[0], a_plus_b[0]], \n",
    "         [a_vec[1], a_plus_b[1]], 'k--')\n",
    "\n",
    "# 装饰\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.xlim(0, 5)  # 设置 x 轴范围\n",
    "plt.ylim(0, 5)  # 设置 y 轴范围\n",
    "plt.axhline(0, color='black', linewidth=0.5)\n",
    "plt.axvline(0, color='black', linewidth=0.5)\n",
    "plt.grid(color='gray', alpha=0.8, linestyle='-', linewidth=0.25) \n",
    "\n",
    "plt.legend() # 添加图例"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c05591b-e2c0-4511-acec-ca4a6719f903",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
